package cn.ware.house.interfaces.mapper;

import cn.ware.house.interfaces.entity.Inventory;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

/**
 * 库存数据访问接口，定义了对库存信息表（inventory表）进行数据库操作的方法。
 * 通过MyBatis框架，这些方法会映射到对应的SQL语句，实现与数据库的交互。
 */
@Mapper
public interface InventoryMapper {

    /**
     * 根据分页参数查询库存信息列表。
     *
     * @param offset 偏移量，用于指定从哪条记录开始查询，通常通过 (page - 1) * size 计算得出，page为页码，size为每页数量。
     * @param limit 每页显示的记录数量。
     * @return 对应分页的库存信息列表。
     */
    List<Inventory> selectInventoriesByPage(int offset, int limit);

    /**
     * 根据库存记录编号查询库存信息，同时获取关联的商品和仓库详细信息。
     *
     * @param inventoryId 库存记录编号
     * @return 对应的库存实体对象（包含关联的商品、仓库以及商品分类信息），如果不存在则返回null
     */
    Inventory selectInventoryById(Integer inventoryId);

    /**
     * 查询所有库存信息，每个库存信息都包含关联的商品、仓库以及商品分类详细信息。
     *
     * @return 包含所有库存信息（含关联信息）的列表
     */
    List<Inventory> selectAllInventories();

    /**
     * 插入库存信息到数据库，需处理好关联的商品和仓库等信息的插入。
     *
     * @param inventory 要插入的库存实体对象
     * @return 受影响的行数，一般插入成功返回1
     */
    int insertInventory(Inventory inventory);

    /**
     * 根据库存记录编号更新库存信息。
     *
     * @param inventory 包含更新后信息的库存实体对象
     * @return 受影响的行数，返回更新的行数数量
     */
    int updateInventoryById(Inventory inventory);

    /**
     * 根据库存记录编号删除库存信息。
     *
     * @param inventoryId 要删除的库存记录编号
     * @return 受影响的行数，删除成功返回1
     */
    int deleteInventoryById(Integer inventoryId);

    /**
     * 查询总记录数
     */
    int selectTotalCount();
}